
from qiniu import Auth, put_file, etag,put_data
import qiniu.config

#Django基础存储后端基类(Storage)
from django.core.files.storage import Storage
from django.conf import settings




class QiNiuYunStorage(Storage):
    '''自定义文件存储系统，修改存储的方案'''

    def __init__(self,fdfs_base_url=None):
        '''
        构造方法，可以不带参数，也可以携带参数
        :param fdfs_base_url:Storage 的 IP

        '''

        self.fdfs_base_url = fdfs_base_url or settings.FDFS_BASE_URL

        #打开本地文件(作用于文件上传)--Django项目二所需
    def _open(self,name,mode='rb'):
            pass

        #保存文件数据(作用于文件上传)－－Django项目二需要使用
    def _save(self, name, content, max_length=None):
            pass

    #该函数的返回值就是，ImageField字段的url属性的结果
    def url(self,name):
        #功能：返回图片的链接
        #我们需要重写该函数。构建完成图片链接返回
        #参数：name:ImageField字段在数据库mysql中存储的值，即是文件的id
        #name = "group1/M00/00/02/CtM3BVrPCAOAIKRBAAGvaeRBMfc0463515"
        return self.fdfs_base_url + name

#需要填写你的 Access Key 和 Secret Key
access_key = 'ksiLJe10XlXIK5VO7RrwgASokcCdRqZH0K20C9Pl'
secret_key = '_56j6Cg7PJbfMSwQnX3Iwn-JbhZtDC_0tL5-WkSS'





def storage(data):
    """利用七牛云存储文件"""
    if not data:
        return None

    try:
        #构建鉴权对象
        q = Auth(access_key, secret_key)
        #要上传的空间
        bucket_name = 'ihome-sz40'
        #上传后保存的文件名
        # key = 'my-logo.png'
        #生成上传 Token，可以指定过期时间等
        token = q.upload_token(bucket_name)
        #要上传文件的本地路径
        # data:上传数据流
        ret, info = put_data(token, None, data)
    except Exception as e:
        # print(e)
        raise e
    # print(info)
    if info and info.status_code != 200:
        raise Exception('上传文件到七牛云失败')

    # print (ret['key'])
    return ret.get('key')


if __name__ == '__main__':
    # file_name = input("输入上传的文件")
    # file_name = r'/home/python/Desktop/u=2070453827,1163403148&fm=26&gp=0.jpg'
    file_name = './timg.jpeg'
    with open(file_name, "rb") as f:
        storage(f.read())